import $C from './config.js';
import $U from './util.js';
import $store from '@/store/index.js';

export default {
	// 全局配置
	common: {
		baseUrl: $C.baseUrl,
		header: {
			'Content-Type': 'application/json;charset=UTF-8',
			// 'Content-Type': 'application/x-www-form-urlencoded',
			'X-Access-Token': '', // 修改请求头字段名
		},
		method: 'GET',
		dataType: 'json',
		token: true
	},

	// 请求 返回promise
	request(options = {}) {
		// 组织参数
		options.url = this.common.baseUrl + options.url;
		options.header = {
			...this.common.header,
			...options.header
		};
		options.data = {
			...this.common.data,
			...options.data
		};
		options.method = options.method || this.common.method;
		options.dataType = options.dataType || this.common.dataType;
		options.token = options.token === false ? false : this.common.token;

		// 请求之前验证...
		// token验证
		if (options.token) {
			let token = $U.getStorage('token');
			// 二次验证
			if (!token) {
				uni.showToast({
					title: '请先登录',
					icon: 'none'
				});
				// token不存在时跳转
				return uni.reLaunch({
					url: '/pages/login/login'
				});
			}
			// 往header头中添加token
			options.header['X-Access-Token'] = uni.getStorageSync("token"); // 设置 X-Access-Token 请求头
		}

		// 请求
		return new Promise((resolve, reject) => {
			// 请求中...
			uni.request({
				...options,
				success: (result) => {
					// 返回原始数据
					if (options.native) {
						return resolve(result);
					}
					// 服务端失败
					if (result.statusCode !== 200) {
						if (options.toast !== false) {
							uni.showToast({
								title: result.data || '服务端失败',
								icon: 'none'
							});
						}
						if (result.statusCode === 401) {
							// Show a popup for 401 status
							uni.removeStorageSync("token")
							uni.showModal({
								title: '异地登录提示',
								content: '您的账号在其他地方登录，请确认是否是本人操作。',
								success: function(res) {
									if (res.confirm) {
										uni.reLaunch({
											url: '/pages/login/login'
										});
										$store.dispatch('logout'); 
										return reject(result.data);
									} else if (res.cancel) {
										
									}
								}
							});
						}
						// token不合法，直接退出登录
						if (result.data === 'Token 令牌不合法!') {
							$store.dispatch('logout');
						}
						return reject(result.data);
					}
					// 其他验证...
					// 成功
					let data = result.data;

					resolve(data);
				},
				fail: (error) => {
					uni.showToast({
						title: error.errMsg || '请求失败',
						icon: 'none'
					});
					reject(error);
				}
			});
		});
	},

	// get请求
	get(url, data = {}, options = {}) {
		return this.request({
			...options,
			url,
			data,
			method: 'GET'
		});
	},

	// post请求
	post(url, data = {}, options = {}) {
		return this.request({
			...options,
			url,
			data,
			method: 'POST'
		});
	},

	// delete请求
	del(url, data = {}, options = {}) {
		return this.request({
			...options,
			url,
			data,
			method: 'DELETE'
		});
	},

	// 上传文件
	//  upload(url, data, onProgress = false) {
	//      return new Promise((resolve, reject) => {
	//          // 上传
	//          let token = $U.getStorage('token');
	//          if (!token) {
	//              uni.showToast({ title: '请先登录', icon: 'none' });
	//              // token不存在时跳转
	//              return uni.reLaunch({ url: '/pages/login/login' });
	//          }

	//          const uploadTask = uni.uploadFile({
	//              url: this.common.baseUrl + url,
	//              filePath: data.filePath,
	//              name: data.name || "file",
	// 	formData: {
	// 	    "biz": "temp"
	// 	},
	//              header: { 'X-Access-Token': token, },
	//              success: (res) => {
	//                  if (res.statusCode !== 200) {
	//                      resolve(false);
	//                      return uni.showToast({ title: '上传失败', icon: 'none' });
	//                  }
	//                  let message = JSON.parse(res.data);
	//                  resolve(message);
	//              },
	//              fail: (err) => {
	//                  console.log(err);
	//                  reject(err);
	//              }
	//          });

	//          uploadTask.onProgressUpdate((res) => {
	//              if (typeof onProgress === 'function') {
	//                  onProgress(res.progress);
	//              }
	//          });

	//      });
	//  },
	upload(url, data, onProgress = false) {
		return new Promise((resolve, reject) => {
			// 上传
			let token = $U.getStorage('token')
			if (!token) {
				uni.showToast({
					title: '请先登录',
					icon: 'none'
				})
				// token不存在时跳转
				return uni.reLaunch({
					url: '/pages/login/login'
				})
			}

			// 获取图片文件大小
			uni.getFileInfo({
				filePath: data.filePath,
				success: (fileInfo) => {
					// 限制图片大小为0.8MB
					if (fileInfo.size > 4 * 1024 * 1024) {
						uni.showToast({
							title: '图片大小不能超过5MB',
							icon: 'none'
						})
						return resolve(false)
					}

					const uploadTask = uni.uploadFile({
						url: this.common.baseUrl + url,
						filePath: data.filePath,
						name: data.name || "file",
						formData: {
							"biz": "temp"
						},
						header: {
							'X-Access-Token': token,
						},
						success: (res) => {
							if (res.statusCode !== 200) {
								resolve(false)
								return uni.showToast({
									title: '上传失败',
									icon: 'none'
								})
							}
							let message = JSON.parse(res.data)
							resolve(message)
						},
						fail: (err) => {
							console.log(err)
							reject(err)
						},
					})

					uploadTask.onProgressUpdate((res) => {
						if (typeof onProgress === 'function') {
							onProgress(res.progress)
						}
					})
				},
				fail: (error) => {
					console.error('获取图片信息失败', error)
					reject(error)
				}
			})
		})
	},
	uploadLicense(url, data, onProgress = false) {
		return new Promise((resolve, reject) => {
			// 上传
			let token = $U.getStorage('token')
			if (!token) {
				uni.showToast({
					title: '请先登录',
					icon: 'none'
				})
				// token不存在时跳转
				return uni.reLaunch({
					url: '/pages/login/login'
				})
			}
	
			// 获取图片文件大小
			uni.getFileInfo({
				filePath: data.filePath,
				success: (fileInfo) => {
					// 限制图片大小为0.8MB
					if (fileInfo.size > 4 * 1024 * 1024) {
						uni.showToast({
							title: '图片大小不能超过5MB',
							icon: 'none'
						})
						return resolve(false)
					}
	
					const uploadTask = uni.uploadFile({
						url: this.common.baseUrl + url,
						filePath: data.filePath,
						name: data.name || "file",
						formData: {
							"biz": "license"
						},
						header: {
							'X-Access-Token': token,
						},
						success: (res) => {
							if (res.statusCode !== 200) {
								resolve(false)
								return uni.showToast({
									title: '上传失败',
									icon: 'none'
								})
							}
							let message = JSON.parse(res.data)
							resolve(message)
						},
						fail: (err) => {
							console.log(err)
							reject(err)
						},
					})
	
					uploadTask.onProgressUpdate((res) => {
						if (typeof onProgress === 'function') {
							onProgress(res.progress)
						}
					})
				},
				fail: (error) => {
					console.error('获取图片信息失败', error)
					reject(error)
				}
			})
		})
	},

	getFullImageUrl(url) {
		return $C.baseUrl + '/' + url;
	},
	getFullUrl(url) {
		return $C.baseUrl + '/' + url;
	},
	getTokenHeader() {
		let token = $U.getStorage('token');
		return {
			'X-Access-Token': token,
		}
	},
	downloadPic(urlPath) {
		//仅在h5端有效
		var oA = document.createElement("a");
		oA.download = urlPath.split("/")[urlPath.split("/").length - 1]; // 设置下载的文件名
		oA.href = urlPath; //图片url
		document.body.appendChild(oA);
		oA.click();
		oA.remove(); // 下载之后把创建的元素删除
	}

}